package com.styletransfer.controller;

import com.styletransfer.model.ApiResponse;
import com.styletransfer.model.Favorite;
import com.styletransfer.model.PageRequest;
import com.styletransfer.model.PageResponse;
import com.styletransfer.service.FavoriteService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 收藏控制器
 * 
 * 提供收藏相关的API接口，包括添加收藏、取消收藏、查询收藏等
 */
@RestController
@RequestMapping("/favorite")
public class FavoriteController {

    @Autowired
    private FavoriteService favoriteService;

    /**
     * 添加收藏
     * 
     * @param favorite 收藏信息
     * @return API响应
     */
    @PostMapping("/add")
    public ApiResponse<Favorite> addFavorite(@RequestBody Favorite favorite) {
        return favoriteService.addFavorite(favorite);
    }

    /**
     * 取消收藏
     * 
     * @param type 收藏类型（1:风格, 2:组合）
     * @param targetId 目标ID
     * @return API响应
     */
    @DeleteMapping("/cancel")
    public ApiResponse<Void> cancelFavorite(
            @RequestParam Integer type,
            @RequestParam Long targetId) {
        return favoriteService.cancelFavorite(type, targetId);
    }

    /**
     * 检查是否已收藏
     * 
     * @param type 收藏类型（1:风格, 2:组合）
     * @param targetId 目标ID
     * @return API响应
     */
    @GetMapping("/check")
    public ApiResponse<Boolean> checkFavorite(
            @RequestParam Integer type,
            @RequestParam Long targetId) {
        return favoriteService.checkFavorite(type, targetId);
    }

    /**
     * 查询用户的收藏
     * 
     * @param type 收藏类型（1:风格, 2:组合）
     * @return API响应
     */
    @GetMapping("/list")
    public ApiResponse<List<Favorite>> getUserFavorites(@RequestParam Integer type) {
        return favoriteService.findByUser(type);
    }

    /**
     * 分页查询用户的收藏
     * 
     * @param type 收藏类型（1:风格, 2:组合）
     * @param page 页码
     * @param size 每页大小
     * @return 分页响应
     */
    @GetMapping("/page")
    public PageResponse<Favorite> getUserFavoritesByPage(
            @RequestParam Integer type,
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer size) {
        PageRequest pageRequest = new PageRequest(page, size);
        return favoriteService.findByUserAndPage(type, pageRequest);
    }
}
